public class Test {
    public static void main(String[] args) {
        //
    }
}
//递归好像也能做（但是递归的开销好像比较大）
//算了，递归暂时没写出来呢，复习的时候记得好好看看递归吧。不光是写法，还有更进一步更深一层的知识、原理
class Solution2{
   /* int ret = 0;
    public int findPoisonedDuration(int[] timeSeries, int duration) {
        //
        return function()
    }

    //递归是一定要用到额外的方法调用嘛？
    public int function(int tCur, int tNext,int d){
        //本次受攻击的时长
        int t =  d;//这个每次递归变不变呀？？？
        return function()
        if(tNext-tCur>=d){
            //
            ret += d;
        }else{
            ret += tNext-tCur;
        }
        return ret;
    }*/
}


class Solution1 {
    public int findPoisonedDuration(int[] timeSeries, int duration) {
        //
        int x = 0;//相邻两个数组元素之间的差值（前后时间差）
        int t = duration;//一次攻击不被打断重置的完整作用时间
        int ret = 0;//最终返回的总攻击时间
        for(int i = 0; i < timeSeries.length-1; i++){
            x = timeSeries[i+1] - timeSeries[i];
            if(x > t){//此次攻击可以完整实现
                ret += t;
            }else{
                ret+=x;
            }
        }
        return ret+t;//这里需要针对最后一个攻击时间——一定是完整作用的，所以加上一个t
    }
}
